﻿#pragma once

/// 初始化 UFloatCurveWrapper 时需要的参数
struct FFloatCurveInitParam
{
	UENUM()
	enum class EInitType
	{
		InitType_Begin,

		// 保持送入的曲线不变
		InitWithoutChange,

		// 根据给定的上下限的范围初始化。这样所有的关键帧的数值，均落在指定的上下限当中
		InitByValueRange,

		// 根据给定的起始值和结束值，初始化关键帧。并且对应缩放其它的关键帧的数值
		// 当曲线的起始值和终止值之间的“升降关系”，与参数中给定的起始值和终止值之间的“升降关系”不一致时，
		// 会自动翻转曲线的关键帧的时间戳，使得曲线的变化趋势、升降关系与参数中给定的起始值和终止值之间的“升降关系”一致。
		// 适用情景：同一份曲线资产的复用。例如文字的出现与消失的可逆表现，共用一份曲线资产即可
		InitByStartEnd_AutoFlipByTime,

		// 根据给定的起始值和结束值，初始化关键帧。并且对应缩放其它的关键帧的数值
		// 当曲线的起始值和终止值之间的“升降关系”，与参数中给定的起始值和终止值之间的“升降关系”不一致时，
		// 会自动翻转曲线的起始值和终止值，使得二者一致。并针对每个关键帧的“值”进行翻转。
		// 适用情景：保持曲线原有的变化规律（例如先快后慢）
		InitByStartEnd_AutoFlipByValue,

		InitType_End,
	} InitType;

	// 定义联合，可以存储多种不同的数值对
	union UnionOfValues
	{
		struct
		{
			float Min; // 下限
			float Max; // 上限
		} Bounds;

		struct
		{
			float Start; // 起始值
			float End; // 终止值
		} StartAndEnd;
	} ValueRange;
};
